<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
    // (function(){
    //   try{
    //       throw new error();
          
    //   }catch (x){
    //     var x=1;y=2;
    //     console.log(x);
    //   }  
    //   console.log(x);
    //   console.log(y);
    // })
    //一个 Proxy 对象由两个部分组成： target 、 handler 。在通过 Proxy 构造函数生成实例对象时，需要提供这两个参数。 target 即目标对象， handler 是一个对象，声明了代理 target 的指定行为。
//     let target = {
//     name: 'Tom',
//     age: 24
// }
// let handler = {
//     get: function(target, key) {
//         console.log('getting '+key);
//         return target[key]; // 不是target.key
//     },
//     set: function(target, key, value) {
//         console.log('setting '+key);
//         target[key] = value;
//     }
// }
// let proxy = new Proxy(target, handler)
// proxy.name;     // 实际执行 handler.get
// proxy.age = 25 // 实际执行 handler.set

// target 可以为空对象
// let targetEpt = {}
// let proxyEpt = new Proxy(targetEpt, handler)
// // 调用 get 方法，此时目标对象为空，没有 name 属性
// proxyEpt.name // getting name
// // 调用 set 方法，向目标对象中添加了 name 属性
// proxyEpt.name = 'Tom'
// // setting name
// // "Tom"
// // 再次调用 get ，此时已经存在 name 属性
// proxyEpt.name
// // getting name
// // "Tom"
 
// // 通过构造函数新建实例时其实是对目标对象进行了浅拷贝，因此目标对象与代理对象会互相
// // 影响
// targetEpt
// // {name: "Tom"}



// 在js赋值加上 ||


    var b;

if(b != null){
    b = b;
}else {
    b = 2;
}

var c = c || 2; //如果c的值不为空，就获取c的值，否则取||之后的值
console.log("b的值："+b,"c的值"+c);


    </script>
</body>
</html>